<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // const:常量：不变的量；
      // Math.PI
      // const a = 10;
      // console.log(a);
      // 1.常量和变量最大的区别：常量不能改变；
      // 不能重复声明
      // const a = 10;
      // const a = 20;
      // 不能被重新赋值；
      // const a = 10;
      // a = 20;

      // 2.没有变量提升 hosting

      // const a = 10;
      // console.log(a);
      // 3.块级作用域
      // {
      //     const a = 10;
      //     console.log(a)
      // }
      // console.log(a);

      // 一般情况下 常量 约定俗成 会大写
      // const PI = 3.1415926;
      // const pi = 242342;
      // 4.不会和window绑定
      // const a = 10;
      // console.log(window.a);

      // const ele = document.querySelector

      // 5.const 定义对象；
      //   const obj = {
      //     name: "张三",
      //     age: 20,
      //   };

      // 覆盖式;
      //   obj = {
      //     name: "李四",
      //   };

      //   obj.name = "李四";
      //   console.log(obj);
      //冻结 不可变对象
      let obj = {
        name: "张三",
        age: 20,
        hobby: {
          one: "篮球",
          two: "足球",
        },
      };
      // 冻结对象； Object.freeze只能冻结一层对象；
      Object.freeze(obj);
      obj.hobby.two = "保龄球";
      obj.age = 30;
      console.log(obj);
      //深冻结
      //   function deepFreeze(obj) {
      //     Object.freeze(obj);
      //     for (let key in obj) {
      //       if (typeof obj[key] === "object") {
      //         deepFreeze(obj[key]);
      //       }
      //     }
      //   }
      //   let obj = {
      //     name: "张三",
      //     age: 20,
      //     hobby: {
      //       one: "篮球",
      //       two: "足球",
      //     },
      //   };
      //   deepFreeze(obj);
      //   obj.hobby.one = "乒乓球";
      //   console.log(obj);
      //
    </script>
  </body>
</html>
